define	( [ 'utils'
		  ]
		, function(utils) {
var ControlPanelInteraction = {
		createPatient : function(patientXML){
			var div = document.createElement("div");
			div.innerHTML = "<div > " + patientXML.querySelector("prénom").textContent + " " + patientXML.querySelector("nom").textContent+ "</div>";
			div.setAttribute('draggable', 'true');
			div.ondragstart = function(e) {e.dataTransfer.setData('Text', "toto"); // Spécifique à FireFox
										   ControlPanelInteraction.draggedPatientHTML = div;
										  }; 
			div.ondragend   = function(e) {ControlPanelInteraction.draggedPatientHTML = null;}
			div.dataset.secu = patientXML.querySelector('numéro').textContent;
			
			return div;
		}
	  ,init					: function()
	  {
			 var self = this;
			 //carte google
			this.newPatientMap = new google.maps.Map(
                    document.getElementById( "map" )
            , { center: new google.maps.LatLng(45.193861, 5.768843)
              , zoom: 11
			  , mapTypeId: google.maps.MapTypeId.ROADMAP
              }
            );
			
			
				
			 //Formulaire, au clique, le formulaire s'affiche
			var btAjouterPatient = document.getElementById("bouton");
			btAjouterPatient.onclick = function() { document.getElementById("addPatient").classList.toggle('afficherForm');;}
			 
			 // Remaining patients
			 this.div_remainingPatient		= document.getElementById('PatientsRestants');
			 
			// New patient
			 var div_addPatient = document.getElementById('addPatient');
			 var btAddPatient	= document.getElementById('btAddPatient');
			 var bt_add			= this.div_remainingPatient.querySelector('button');

			// Nurses
			 this.tableInfirmiere     = document.getElementById( 'Affectations' );
			 this.bodytableInfirmiere = this.tableInfirmiere.querySelector('tbody');

			 utils.XHR( 'GET', 
			 '/data/cabinetInfirmier.xml'
					  , {onload : function() {
									console.log("GET cabinet :", this);
									var patientDeInf ={none:[]};
									var patients = this.responseXML.querySelectorAll('patients > patient');
									for(var i=0; i<patients.length; i++){
										var patient = patients.item(i);
										var visite = patient.querySelector('visite');
										if(visite && visite.hasAttribute('intervenant') && visite.getAttribute('intervenant') !== ''){
											var intervenant = visite.getAttribute('intervenant');
											if(typeof patientDeInf[intervenant] === "undefined"){
												patientDeInf[intervenant]=[];
											}
											patientDeInf[intervenant].push(patient);
										}
										else{
											 patientDeInf.none.push(patient);
										}
									}
									// Affichage html
									var infirmiers = this.responseXML.querySelectorAll("infirmiers > infirmier");
									for(var i=0; i < infirmiers.length; i++){
										var infirmier = infirmiers.item(i);
										var tr = document.createElement("tr");
										tr.innerHTML = '<td id="'+ infirmier.getAttribute("id") +'"class="infirmier"></td><td id="'+ infirmier.getAttribute("id") +'" class="tournee"></td>'; 
										tr.querySelector("td.infirmier").innerHTML = infirmier.querySelector("nom").textContent + " " + infirmier.querySelector("prénom").textContent;
										
										var tdTournee = tr.querySelector('td.tournee');
										var patients = patientDeInf[infirmier.getAttribute("id")] || [];
										tr.ondragover = function(e)
										{
											 if(ControlPanelInteraction.draggedPatientHTML) {
												 e.preventDefault();
												}
											}
										tr.ondrop = function(e)
										{
											e.preventDefault();
											var node = ControlPanelInteraction.draggedPatientHTML;
											// Débrancher du parent :
											node.parentNode.removeChild(node);
											// Attacher à la zone 
											// this référence le tr qui s'est abonné
											var tdTournee = this.querySelector('td.tournee');
											tdTournee.appendChild(node);
											// Appel au serveur
											
											utils.XHR	( "POST", "/affectation"
														, { onload: function() {console.log('affectation répond:', this);}
														  , variables : { patient    : node.dataset.secu
																		, infirmier : tdTournee.getAttribute('id')
																		}
														  }
														);
																		
																		
																		
										}
										
										
										
										
										
										
										
										
										
										for(var j=0; j<patients.length; j++){
											tdTournee.appendChild(ControlPanelInteraction.createPatient(patients[j]));
										}
										document.querySelector("#Affectations > tbody").appendChild(tr);
									}
									
									// Les patients non affectés
									var divPatientNonAffectés = document.querySelector("#PatientsRestants div");
									divPatientNonAffectés.ondragover = function(e){
																			 if(ControlPanelInteraction.draggedPatientHTML) {
																				 e.preventDefault();
																				}
																			}
									divPatientNonAffectés.ondrop = function(e){
																		 e.preventDefault();
																		 var node = ControlPanelInteraction.draggedPatientHTML;
																		 // Débrancher du parent :
																		 node.parentNode.removeChild(node);
																		 // Attacher à la zone des patients non affectés
																		 divPatientNonAffectés.appendChild(node);
																		 // Appel au serveur
																		 utils.XHR	( "POST", "/affectation"
																					, { onload: function() {console.log('affectation répond:', this);}
																					  , variables : { patient    : node.dataset.secu
																									, infirmier : 'none'
																									}
																					  }
																					);
																		}
									for(var j=0; j<patientDeInf.none.length; j++){
										 var patient = patientDeInf.none[j];
										 divPatientNonAffectés.appendChild(ControlPanelInteraction.createPatient(patient));
										}
												
								}
								
						}
					  );
		}
};

return ControlPanelInteraction;
});
